package tracksystem;


import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;

import managesystem.Student;

import com.googlecode.objectify.Key;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;


public class Activity {
	
	private int duration;

	private String place;

	private String description;
	
	private ArrayList<Key<Student>> buddyKeys = new ArrayList<Key<Student>>();
	
	private int rating;
	
	private String comment;

	private ArrayList<String> distractions = new ArrayList<String>();
	
	private String type; //"hoorcolege", "oefenzitting", "studietijd" of ...
	
	private ArrayList<String> aidTools = new ArrayList<String>();

	protected Activity(){} //nodig voor objectify
	
	public Activity(int duration,
					String place, 
					String description,
					int rating, 
					String type, 
					String comment) 
	{
		
		this.place = place;
		this.description = description;
		this.rating = rating;
		this.type = type;
		this.comment = comment;
		
	}

	
	/**
	 * retourneert de plaats
	 * 
	 * @return String
	 */
	public String getPlace() {
		return place;
	}

	/**
	 * retourneert de beschrijving
	 * 
	 * @return
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * retourneert de maatjes
	 * 
	 * @return arraylist van maatjes
	 */
	public Collection<Student> getBuddylist() {
		Objectify ofy = ObjectifyService.begin();
		Map<Key<Student>,Student> buddies = ofy.get(buddyKeys);
		
		return buddies.values();
	}

	/**
	 * retourneert de rating
	 * 
	 * @return rating
	 */
	public int getRating() {
		return rating;
	}

	/**
	 * retourneert de commentaar op de activiteit
	 * 
	 * @return commentaar
	 */
	public String getComment() {
		return comment;
	}

	/**
	 * retourneert de afleidingen
	 * 
	 * @return arraylist met afleidingen
	 */
	public ArrayList<String> getDistractions() {
		return distractions;
	}

	/**
	 * retourneert het type van de activiteit
	 * 
	 * @return een string met type activiteit
	 */
	public String getType() {
		return type;
	}

	/**
	 * retourneert gebruikte hulpmiddelen
	 * 
	 * @return een array met hulpmiddelen
	 */
	public ArrayList<String> getAidTools() {
		return aidTools;
	}

	/**
	 * voegt een maatje toe
	 * 
	 * @param buddy
	 *            een student object
	 */
	public void addBuddy(Student s) {
		buddyKeys.add(new Key<Student>(Student.class, s.id));
	}

	/**
	 * zet een commentaar bij de activiteit
	 * 
	 * @param comment
	 *            string met commentaar
	 */
	public void setComment(String comment) {
		this.comment = comment;
	}

	/**
	 * Voegt een ongebruikte afleiding toe aan de arraylist van afleidingen
	 * 
	 * @param distraction
	 *            een string van een afleiding
	 */
	public void setDistraction(String distraction) {
		boolean usedDistraction = false;
		for (int i = 0; i < distractions.size(); i++) {
			if (distractions.get(i).equals(distraction)) {
				usedDistraction = true;
			}
		}
		if (usedDistraction == false) {
			distractions.add(distraction);
		}
	}

	/**
	 * voegt een ongebruikt hulpmiddel toe aan de arraylist met hulpmiddelen
	 * 
	 * @param aidTool
	 *            een string van een hulpmiddel
	 */
	public void setAidTool(String aidTool) {
		boolean usedAid = false;
		for (int i = 0; i < aidTools.size(); i++) {
			if (aidTools.get(i).equals(aidTool)) {
				usedAid = true;
			}
		}
		if (usedAid == false) {
			aidTools.add(aidTool);
		}
	}

	/**
	 * retourneert de tijd die gespendeerd is aan de activiteit in miliseconden
	 */
	public int getDuration() {
		
		return duration;
	}

	public Long getId(){
		return null;
	}

}
